<?php
/**
 * Created by PhpStorm.
 * User: dell
 * Date: 2018/7/27
 * Time: 18:04
 */

namespace app;


//入口类
use wechat\core\Button;
use wechat\core\Jssdk;
use wechat\core\Message;
use wechat\core\User;
use wechat\Wx;

class Entry
{

//2.5为了引入微信接口，请在此创建构造函数，当实例化这个类时，将优先运行引入接口方法
    public function __construct()
    {
//        2.6对wechat目录下的valid()方法进行调用
        (new Wx())->valid();
//        现在下面创建控制类
    }

    /**
     * 3.4控制方法
     */
    public function handle()
    {
        //测试用户发来的消息
        //获取用户发来的消息
        $message = (new Wx())->getMessage();
        //将用户消息写入文件中查看
        //使用file_put_contents() 函数把一个字符串写入文件中。
        //参数1：要写入的文件，文件不存在是，将自动创建文件；
        //参数2：要写入文件的数据。可以是字符串、数组或数据流。
        //这里利用了var_export()方法，将数组转换成字符串；
        file_put_contents('message.php', var_export($message, true));

//        测试自动回复用户信息
//        $time = time();
////        查看开发者文档中的->被被动回复 下面的FromUserName、ToUserName..等等关键字都来自与文档和我们上面自动接收微信服务器传来的数据自动创建的message.php文件;
//        $xml = <<<php
//<xml><ToUserName><![CDATA[$message->FromUserName]]></ToUserName><FromUserName><![CDATA[$message->ToUserName]]></FromUserName><CreateTime>$time</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[我是直接回复]]></Content></xml>
//php;
//
//        echo $xml;
//        4.1 使用text格式回复用户
        //.1在wechat目录下建立微信的核心core目录->在此目录下创建一个用来进行回复的类，名自定
        //我们在这里起名为Message；->下面进入Message类中进行操作；
        //将文本回复尽行封装后，就可以在这里控制回复的内容了；
//        var_dump($message->Content);
//        (new Message())->text('你好,我们收到了你的消息');
//        echo 123123;

//        5.2测试图片回复
        //参数是来自message.php文件夹中的MediaId用户发来的图片；
//        (new Message())->image($message->MediaId);

//        6.1关键词回复
        //思路判断用户发来的文本消息内容，在直接调用Message类中的text()进行自动回复；
//        if ($message->Content == '你好') {
//            (new Message())->text('你好');
//        } else if ($message->Content == '电影') {
//            (new Message())->text('我没有电影');
//        };


//        7.1测试用户关注微信号，并自发动回复
        //参考微信开发文档->接收事件推送
        //思路：.1 将判定判定是否关注的方法进行封装
//                .2 判定传递来的消息类型是不是event 并且判定订阅类型是不是 订阅;
//        if((new Message())->isSubscribe()){
//            (new Message())->text('感谢关注');
//        }

        //7.2设置取消关注方法
        //参考手册 接收事件推送
        //.1 判定用户是否取消关注，取消了删除用户的数据 或者给当前用户的这条数据加一个字段（标识）；
//        if((new Message())->Unsubscribe()){
////            再次出请写对数据库的相应操作
//        }


        //8.1因为测试需要，每次都会向微信端发送获取access_token的请求，由于每天的请求此数有限，所以我们将这个请求文件保存下来，我们就能使用2小时；
        //思路：定义一个文件存储目录，将文件存储在我定义的目录中。
        // .2 当每次需要请求时，首先判断是否存在存放access_token缓存数据的文件，并且判定文件是否过期，如果2条件动满足就直接取值，如果有一个不满足就重新获取并保存；
//        现在进入Wx类中进行进行getAccessToken()方法的编写；
        //测试获取access_token方法
//        $token = (new Wx())->getAccessToken();
//        var_dump($token) ;


        //8.2创建自定义菜单
//        $post = '{
//     "button":[
//     {
//          "type":"view",
//          "name":"百度网",
//          "url":"https://www.baidu.com"
//      },
//      {
//        "name":"菜单",
//           "sub_button":[
//           {
//               "type":"view",
//               "name":"优酷",
//               "url":"http://www.优酷.com/"
//            },
//            {
//                "type":"click",
//               "name":"赞一下我们",
//               "key":"V1001_GOOD"
//            }]
//       }]
//    }';
//        (new Button())->create($post);
//        print_r($aa);
//            现在建立Button类，写按钮操作

//        测试查询按钮方法
//        $aa = (new Button())->getButton();
//        var_dump($aa);//返回值等于true为测试成功；
        //测试按钮删除方法
//        $post = '{
//     "button":[
//     {
//          "type":"view",
//          "name":"百度网",
//          "url":"https://www.baidu.com"
//      },
//      {
//        "name":"菜单",
//           "sub_button":[
//           {
//               "type":"view",
//               "name":"优酷",
//               "url":"http://www.优酷.com/"
//            },
//            {
//                "type":"click",
//               "name":"赞一下我们",
//               "key":"V1001_GOOD"
//            }]
//       }]
//    }';
        //发现微信号上的按钮已经消失，说明测试成功;
//        $aa = (new Button())->deleteButton($post);
//        var_dump($aa);

        //测试创建标签 手册用户管理->用户标签管理  创建一个User类作为写用户管理
//        根据手册创建一个标签
//        $tag = '{"tag" : {"name" : "c93学生"}}';
//        测试添加标签方法
//        (new User())->createTag($tag);
//        var_dump($aa);
        //返回值为true表示成功
//        测试获取标签名
//        $aa = (new User())->getTag();
//        var_dump($aa);
        //测试编辑标签
        //将要编辑的的标签id写好，将要编辑成的内容写上；
//        $tag = '{"tag":{"id":101,"name":"c93"}}';
//        $aa=(new User())->updataTag($tag);
//        var_dump($aa);
        //测试删除方法
//        创建要删除的标签的id
//        $tag = '{"tag":{"id":100}}';
//        $aa = (new User())->deleteTag($tag);
//        var_dump($aa);
        //测试设置用户备注名
//        .1 手册 用户管理->设置用户备注名；
//        创建要设置的用户以及备注名
//        $post ='{"openid":"oxZqB0VQJ6zQaRdVaQ9AnUfmefGU","remark":"刘通"}';
//        $aa = (new User())->setMark($post);
//        var_dump($aa);
        //获得单个用户的基本信息  手册获得用户基本信息
//        创建要获得那个用户的基本参数
//        $aa= (new User())->getUserInfo('oxZqB0VQJ6zQaRdVaQ9AnUfmefGU','zh_CN');
//        echo '<pre>';
//        var_dump($aa);
        //测试批量获得用户信息  最多100个；参考手册 获取用户数据 批量获取用户数据；
//        $post = '{
//    "user_list": [
//        {
//            "openid": "oxZqB0VQJ6zQaRdVaQ9AnUfmefGU",
//            "lang": "zh_CN"
//        },
//        {
//            "openid": "oxZqB0YhbPQ_jOkKX5cWzPSnnQho",
//            "lang": "zh_CN"
//        },
//        {
//            "openid": "oxZqB0fwhLK0cZK5PjfIwo7c1txk",
//            "lang": "zh_CN"
//        }
//    ]
//}';
//        $aa = (new User())->userInfoList($post);
//        echo '<pre>';
//        print_r($aa);

        //测试用户列表方法
//        $aa = (new User())->getUserList();
//        echo '<pre>';
//        print_r($aa);

        //测试jsapi_ticket权限签名算法；
//        (new Wx())->getJsApiTicket();
//        echo "<pre>";
//            print_r($_SERVER);
//        echo "<pre>";
//        调用签名方法 include会自动将距离他最近的变量带入模板中
        $data = (new Jssdk())->makeSign();
//        print_r($data);

//        加载模板
        include 'app/view/index.php';

    }

}